perm filename MPRNT.F4[NEW,LCS]23 blob
sn#519456 filedate 1980-06-28 generic text, type T, neo UTF8
00100 C MPRNT.F4********** DRAWS MUSIC ON THE PLOTTER OR XGP **********
00200 C *** READS DATA FROM DSK FOR VARIOUS THINGS.
00300 C*** UNKNOWN, ENDIT, ILLEGL, TOOMCH, PLTCMD, SLUR, NAMEXT
00400
00500 COMMON /DL/IXRX,SAVER,NAME,EXT /FRMT/F78F(1),FA1(1),FA5(1),ASK
00600 1 /LIMIT/LIMIT,ITEM,L,I,M /DPY/GO,TOP,BOT /FONT/JFONT
00700 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
00800 C ↓↓↓↓↓ V IS FOR READIN ONLY
00900 C%%%%%%%%
01000 COMMON /STF/RSTFAC(0/7),RSTJ2 /POSI/STFF(0/7),JJ2,POS
01100 1 /PTR/PWDS(350)
01200 1/PLTR/PLT,RHT,DIS,XDIS
01300 COMMON /XRN/ RN(3000),V(3000) /ALF/INP(72),ML /SSS/SSS(200)
01400 1 /SLR/SLURX(272)
01500 C ORDER OF COMMON MUST! REMAIN AS IS (FOR DMP MODE READ)
01600 CXXX COMMON/TTOP/JTOP,JBOT
01700 DIS=1.24
01800 C 1.24 IS FACTOR FOR 8 1/2 X 11 PAGE.
01900 CXX JTOP=-9999
02000 CXX JBOT=9999
02100 C SET VERTICAL LIMITS TO KNOW FINAL SIZE OF IMAGE.
02200 CCC CALL ERRSET(0)
02300 C AVOID USELESS TYPEOUTS.
02400 CALL MPRFAI
02500 END
02600
02700 C***** SOME TYPEOUT AND ACCEPT ROUTINES *******
02800
02900 SUBROUTINE UNKNWN(JA)
03000 CALL TYPSTR('UNKNOWN CODE =')
03100 CALL TYPINT(JA)
03200 CALL TYPCRL
03300 C TRAP FOR UNKNOWN CODE #S (SUCH AS 99 - FOR "NO KSIG".
03400 END
03500
03600 SUBROUTINE ENDIT(A,ITMS)
03700 COMMON/TTOP/JTOP,JBOT
03800 COMMON /OUTF/JJ,KOUT,KNT
03900 C FIND REAL VERTICAL SIZE OF IMAGE.
04000 X=(JTOP-JBOT)/200.0
04100 CALL TYPFLT(X)
04200 CALL TYPSTR(' INCHES. ')
04300 X=X*2.54
04400 CALL TYPFLT(X)
04500 CALL TYPSTR(' CM. ')
04600 CALL TYPINT(ITMS)
04700 CALL TYPSTR(' ITEMS. FILE=')
04800 CALL TYPWRD(KOUT)
04900 CALL TYPSTR('.PLT ')
05000 CALL TYPINT(KNT)
05100 CALL TYPSTR(' VECTORS.')
05200 CALL PLOT(0,0,99)
05300 C THE END OF THE DATA
05400 END
05500
05600 SUBROUTINE ILLEGL(JA)
05700 CALL TYPSTR('ILLEGAL STAFF# ')
05800 CALL TYPINT(JA)
05900 CALL TYPCRL
06000 END
06100
06200 SUBROUTINE TOOMCH(K)
06300 CALL TYPSTR('***** TOO MUCH DATA ***** ')
06400 CALL TYPINT(K)
06500 CALL TYPSTR('/3000')
06600 STOP
06700 END
06800
06900 CCCCCCCCCCCCCCCCCCC SUBRS. SLUR, PLTSRT, (LINES, RDRAW),PLTCMD
07000
07100 SUBROUTINE PLTCMD(NOSET)
07200 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /OUTF/JJ,KOUT,KNT
07300 DIMENSION NMS(20),RMOV1(20),RMOV2(20)
07400 C**** NO MORE THAN 20 FILES PER PAGE **** (COULD BE INCREASED)
07500 COMMON /DL/RSIZ,SAVER,NAME,EXT /ALF/INP(72),ML
07600 COMMON R2,JE,CENTR,JB,RJQ(20),JQ(20) /INCR/INCR
07700 EQUIVALENCE (R5,RJQ(3)),(R6,RJQ(4)),(R7,RJQ(5)),(R4,RJQ(2))
07800 1,(R3,RJQ(1)),(I2,INP(2)),(R8,RJQ(6)),(R9,RJQ(7)),(NMS(1),NM1)
07900 C BE CAREFUL OF COMMON OVERLAPS WITH NOTWRT,ITMSUB,HOMER, ETC.
08000 DATA FA1(1)/'(A1) '/,F78F(1)/'(78F)'/,EXT/'MS'/,RYY/'Y'/
08100
08200 IF(I2.NE.'%')GO TO 1
08300 I2=0
08400 C I2=% FIRST TIME THROUGH (WAS X, BEFORE 2/78)
08500 RXC=0
08600 RMOV1(1)=RYY
08700 NAME=0
08800 14 KA=0
08900 3 KA=KA+1
09000 IF(MLL.EQ.0)GO TO 15
09100 K=K-2
09200 MLL=MLL-1
09300 IF(MLL.NE.0)GO TO 31
09400 IF(MORE)GO TO 10
09500 C ADD 100 TO RSPC TO READ IN NEW ALPHABETICAL SERIES OF FILES.
09600 15 CALL TYPSTR('TYPE FILE NAME')
09700 CALL TYPINT(KA)
09800 CALL TYPSTR(' ')
09900 C TYPE FIRST NAME, NUMBER FOR A SERIES, 2ND NUM FOR FIXED SPACE ".
10000 CALL NAMEXT(K,EXT,MLL,RSPC)
10100 MORE=-1
10200 IF(RSPC.LT.100)GO TO 30
10300 MORE=0
10400 RSPC=RSPC-100.
10500 30 IF(KA.LT.21)GO TO 155
10600 CALL TYPSTR('****ONLY 20 FILES ACCEPTED****')
10700 GO TO 10
10800 155 IF(K.NE.' ')GO TO 51
10900 IF(KA.NE.1)GO TO 10
11000 C DEFAULT NAME IS 'TMP 1'
11100 K='TMP'
11200 MLL=1
11300 51 IF(K.EQ.'99')GO TO 140
11400 IF(KA.EQ.1)NM1=K
11500 C 99=BACKUP
11600 251 IF(MLL.GE.99)GO TO 151
11700 IF(MLL.EQ.0)GO TO 151
11800 K=K+2*(MLL-1)
11900 C THIS CHANGES GIVEN NAME TO LAST OF SERIES.
12000 C I.E. AAAAA 5 WILL GET AAAAE FIRST AND WORK BACKWARDS.
12100 151 IF(K.NE.'NOSET')GO TO 31
12200 NOSET=-1
12300 C ACTIVATES ANTI-RESET IN MPRFAI.FAI
12400 GO TO 15
12500
12600 31 IF(LOOKX(K,EXT))GO TO 56
12700 C JUMP IF FILE FOUND
12800 CALL TYPSTR('FILE NOT FOUND')
12900 CALL TYPCRL
13000 GO TO 15
13100 11 FORMAT(A5,I,F)
13200 56 IF(MLL.LT.99)GO TO 560
13300 MLL=0
13400 561 K=K+2
13500 C TYPE 'AAAAA 99' TO FIND ALL IN 'AAAAx' SERIES AUTOMATICALLY
13600 MLL=MLL+1
13700 IF(LOOKX(K,EXT))GO TO 561
13800 C KEEPS GOING BACK IF FILES ARE FOUND
13900 K=K-2
14000 CALL TYPSTR('READING FILES --- ')
14100 CALL TYPWRD(NM1)
14200 CALL TYPCHR('.',1)
14300 CALL TYPWRD(EXT)
14400 CALL TYPCHR('THRU ',6)
14500 CALL TYPWRD(K)
14600 CALL TYPCRL
14700 560 NMS(KA)=K
14800 IF(MLL.EQ.0)GO TO 5
14900 R8=RYY
15000 IF(RSPC.NE.0)R8=RSPC
15100 GO TO 21
15200 5 CALL TYPSTR('MOVE UP AT END? ')
15300 ACCEPT 11,R8
15400 IF(R8.EQ.'99')GO TO 15
15500 CALL LO2UP(R8)
15600 X=R8
15700 IF(R8.NE.RYY)R8=0
15800 C IRCAM FORTRAN GIVES ERROR IF 'REREAD F78F' HITS AN ALPHA.
15900 IF(X.GT.'Z')REREAD F78F,R8
16000 C211 FORMAT(A1)
16100 C255 ACCEPT 211,R8
16200 C CALL LO2UP(R8)
16300 C IF(R8.GT.'Z')REREAD F78F,R8
16400 C IF(R8.EQ.99.)GO TO 15
16500 C IF(R8.NE.RYY)R8=0
16600 C MOVE NUMBER CAN BE TYPED FOR 'MOVE UP' ('NO', R8=0, IS DEFAULT ANSWER)
16700 21 RMOV1(KA+1)=R8
16800 RMOV2(KA)=R8
16900 GO TO 3
17000 140 KA=KA-1
17100 GO TO 15
17200
17300 10 KB=KA-1
17400 22 CALL TYPSTR('SIZE FACTOR? ')
17500 ACCEPT F78F,RSIZ,R9
17600
17700 C******** SET R9 TO 1 FOR FULL DENSITY FILLER ON SIZES OVER 1.9
17800 C******** R9=SLICE INCREMENT FOR FILLER
17900
18000 IF(RSIZ.EQ.99)GO TO 5
18100 IF(RSIZ.EQ.0)RSIZ=1.
18200 CALL TYPSTR('TYPE OUTPUT NAME - ')
18300 ACCEPT 11,JJ
18400 CALL LO2UP(JJ)
18500 IF(JJ.EQ.' ')JJ='PLT'
18600 IF(JJ.EQ.'*')JJ=NMS(KA-1)
18700 C TYPE * TO USE 1ST INPUT NAME FOR OUTPUT NAME.
18800 KOUT=JJ
18900 CALL VARIAN
19000 C THIS SETS UP VARIAN OUTPUT IN MPV.DMP, ELSE A DUMMY
19100 INCR=1
19200 C FOR CALCMP STYLE FILLER TYPE NUM ≥10 (USUALLY 20)
19300 C INCR=20 MEANS FILLER INCREMENT OF 2 ON THE CALCMP
19400 IF(R9.NE.0)INCR=R9
19500 222 KA=0
19600
19700 1 IF(NAME.NE.0)GO TO 12
19800 IF(KA.NE.KB)GO TO 13
19900 I2=-1
20000 RETURN
20100 C THE END OF THE DATA
20200 13 NAME=NMS(KA+1)
20300 CALL TYPWRD(NAME)
20400 CALL TYPCHR('.',1)
20500 CALL TYPWRD(EXT)
20600 CALL TYPCRL
20700 RETURN
20800 12 KA=KA+1
20900 NAME=0
21000 R8=0
21100 R2=RSIZ
21200 R3=RSIZ
21300 C FOR FILLER. SIZES .LT. 1.6 = EVERY SCAN LINE, .LT. 2.6 = 2, ETC.
21400 R7=0
21500 R5=1
21600 R6=1
21700 IF(RMOV2(KA).NE.RYY)R7=RMOV2(KA)
21800 IF(RMOV1(KA).NE.0)R5=0
21900 IF(RMOV2(KA).NE.0)GO TO 77
22000 IF(R7.EQ.0)RETURN
22100 77 R6=0
22200 END
22300
22400
22500 SUBROUTINE SLUR
22600 IMPLICIT INTEGER(A-Q,T-Z)
22700 COMMON /ALF/INP,SLURY(72) /SSS/ SSS(200) /SLR/ SLURX(1)
22800 REAL CENTR
22900 COMMON /PLTR/PLT,RHT,RDIS,XDIS
23000 COMMON R2,JA,CENTR,J2,R3,R4,R5,R6,R7,R8,R9,R10,RA,RB,
23100 1 K,KQ,TWICE,RST7,RX,RXX,RTILT,RC,RZ,RW,J3,J4,
23200 1 J5,J6,J7,J8,J9,J10,J11,JQ(7),R,RJ
23300 1 /PTR/PWDS(1) /LIMIT/LIMIT,ITEM,L,I,IX /STF/RSTFAC(0/7),RSTJ2
23400 C DEFAULT VALUE OF SLUR CURVE FACTOR IS 2.8 C DATA RZZ/2.8/
23500
23600 2 IF(J8.GE.7)CALL BRKSLR
23700 C J8=7=SLUR WITH VERT. BRKTS. =8=BRKT ON LEFT ONLY. =9=ON RIGHT ONLY.
23800 J10=1
23900 J4=0
24000 KQ=5
24100 TWICE=-1
24200 C -1 FOR DISPLAY, USES ONLY 1/3 OF SEGMENTS
24300 IF(PLT.GE.0)GO TO 21
24400 TWICE=0
24500 KQ=1
24600 RWID=.2
24700 IF(RHT.LT.2)GO TO 21
24800 TWICE=1
24900 RWID=.14
25000 C IF SIZE IS GT.2 3 SLURS ARE DRAWN
25100 IF(RHT.LT.3)GO TO 21
25200 TWICE=2
25300 C IF SIZE IS GE.3 4 SLURS ARE DRAWN
25400 RWID=.1
25500 21 RST7=RSTJ2*7.
25600 RQQ=R5-R4
25700 IF(R6.GT.1000)CALL RNOTE(R6)
25800 GO TO (5,6,7),J8+4
25900 GO TO 4
26000 5 R=30
26100 CC5 R=32
26200 C AFTER DOTTED NOTE
26300 GO TO 8
26400 CC6 R=18
26500 6 R=22
26600 C BETWEEN NOTES
26700 8 RX=-0.75
26800 CC8 RX=-1.3
26900 GO TO 9
27000 7 R=7
27100 RX=RSTJ2
27200 9 CALL RJBX(R)
27300 R6=R6+RX
27400 4 RXX=RHORZ(R6)-R3
27500 RTILT=RQQ*RST7
27600 80 RX=SQRT(RXX*RXX+RTILT*RTILT)
27700 IF(J8.NE.-1)GO TO 10
27800 IF(RQQ.GT.8)RQQ=8
27900 IF(RQQ.LT.-8)RQQ=-8
28000 CCCC RQQ=RQQ*RSTFAC(J2)
28100 IF(R7)RQQ=-RQQ
28200 R3=R3-RQQ*RSTJ2
28300 CCCC R3=R3-RQQ
28400 C MOVES STEEP SLUR LEFT OR RIGHT IF P8=-1
28500 10 RJ=ABS(R7)
28600 C R7+100=LEFT HALF SLUR, +200=RIGHT HALF, +300=REVERSE DIRECTION.
28700 IF(RJ.LT.100)RJ=-1
28800 IF(RJ.GE.300)RJ=0
28900 R7=AMOD(R7,100.0)
29000 R=RDIS*RX*.4
29100 L=R
29200 L=L*2
29300 C TO INSURE AN EVEN NUMBER OF VECTORS (ONLY 1/2 ARE COMPUTED IN SLOOP)
29400 IF(L.LT.60)L=60
29500 IF(L.GT.272)L=272
29600 IF(J11.EQ.0)GO TO 1
29700 R=R*2
29800 RZ=L-60
29900 J11=RZ * 10./212. +7.
30000 RXXX=.02
30100 111 IF(R.GT.272)J11=J11-RXXX*(R-272)
30200 IF(J11.LT.7)J11=7
30300 11 IF(MOD(L/J11,2).NE.0)GO TO 1
30400 C TO INSURE AN UNEVEN NUMBER OF SEGMENTS (SO THE LAST IS BLACK)
30500 J11=J11+1
30600 GO TO 11
30700 CC J11=R/7.
30800 CC IF(J11.LT.7)J11=7
30900 CC IF(J11.GT.39)J11=39
31000 CC J11=RDIS*L/J11
31100 C FOR DASHED SLURS
31200 C L=NUMB OF SEGMENTS IN THE CURVE.
31300
31400 1 R=CENTR
31500 IF(J8.GT.0)GO TO 180
31600 C JUMP FOR BRACKETS
31700 CALL SLOOP
31800
31900 IF(J4.NE.0)GO TO 83
32000 87 CALL LINES(SLURX(J10),SLURY(J10),3)
32100 IF(J11.EQ.0)J4=-1
32200 83 J5=KQ
32300 J6=J10
32400 J7=L
32500 CCCC IF(J11.NE.0)GO TO 122
32600 IF(J4)GO TO 22
32700 IF(J11.NE.0)GO TO 22
32800 J5=-1
32900 J6=L
33000 J7=J10
33100 22 CALL SLRS
33200 CC22 DO 88 K=J6,J7,J5
33300 CC88 CALL LINES(SLURX(K),SLURY(K),2)
33400 CC GO TO 123
33500
33600 CC122 KD=2
33700 CC KT=0
33800 CC KA=1
33900 C THIS WILL MAKE DASHED SLURS J11 HAS DASH SIZE.
34000 CC DO 188 K=J6,J7,J5
34100 CC KT=KT+1
34200 CC IF(KT.LT.J11)GO TO 188
34300 CC KT=0
34400 CC KD=KD+KA
34500 CC KA=-KA
34600 C BLANK-DASH FLIP-FLOP
34700 CC188 CALL LINES(SLURX(K),SLURY(K),KD)
34800
34900 123 IF(J5.GT.1)CALL LINES(SLURX(L),SLURY(L),2)
35000 IF(TWICE)RETURN
35100 TWICE=TWICE-1
35200 IF(J8.GT.0)GO TO 182
35300 J4=-J4
35400 R7=R7+RWID
35500 C RWID=WIDTH OF SLUR -- SEE DATA
35600 GO TO 1
35700 180 RW=R+R7*RST7
35800 TWICE=-1
35900 KQ=1
36000 RX=RX+R3
36100 CC RA=(R5-R4)*RST7
36200 IF(J9.EQ.0)GO TO 181
36300 TWICE=2
36400 RZ=RTILT/(RX-R3)
36500 RXX=RX
36600 RWID=(R3+RXX)/2.
36700 182 IF(TWICE.EQ.1)GO TO 183
36800 C DOES LEFT SIDE FIRST.
36900 IF(TWICE.EQ.0)GO TO 184
37000 C LAST IS NUMBER.
37100 J8=2
37200 RC=RSTJ2*13.
37300 RX=RWID-RC
37400 RWW=RTILT
37500 185 RTILT=RZ*(RX-R3)
37600
37700 C PUT IN FUNC. HERE FOR THIS SLOPE AND FOR PART. BEAMS.
37800
37900 GO TO 181
38000 183 J8=3
38100 RX=RXX
38200 RTILT=RWW
38300 RXX=R3
38400 R3=RWID+RC
38500 RXX=RZ*(R3-RXX)
38600 R=R+RXX
38700 RW=RW+RXX
38800 GO TO 185
38900
39000 181 SLURX(1)=R3
39100 SLURY(1)=R
39200 SLURX(2)=R3
39300 SLURY(2)=RW
39400 SLURX(3)=RX
39500 SLURY(3)=RW+RTILT
39600 SLURX(4)=RX
39700 SLURY(4)=R+RTILT
39800 L=4
39900 IF(J8.EQ.2)L=3
40000 IF(J8.EQ.3)J10=2
40100 IF(R10.EQ.0)GO TO 87
40200 C 1ST AND 2ND ENDING BRACKET. P10=1 OR 2. YOU MUST SET OTHER PARAM.
40300 C ST P7=8 P8=1. FOR 2ND ENDING USE P8=2
40400 R4=R4+R7-4.5
40500 R5=1.
40600 RX=18.
40700 J3=R3+RX*RSTJ2
40800 R6=50003899.+R10*10000.
40820 RQQ=R
40840 RWW=RW
40860 C R AND RW WIPED OUT IN ALPHA
40900 1181 CALL ALPHA
40910 C BE CAREFUL ABOUT ALPH MIGHT WIPE OUT!!
41000 J5=1
41010 1184 SLURY(1)=RQQ
41020 C DO THESE HERE BECAUSE THEY GET WIPED OUT IN ALPHA.
41030 SLURY(2)=RWW
41040 SLURY(3)=RWW
41050 SLURY(4)=RQQ
41100 GO TO 87
41200 184 J3=RWID
41300 C PUT IN VERT. POS. WHEN SLOPE!
41400 R4=RQQ/2.+R4+R7-1.
41500 R6=0.875
41600 C .875 IS SIZE OF NUM. R7=1 MAKES ITALIC FONT
41700 R7=1.
41800 R8=0
41900 CALL MAKNUM(R9)
42000 END
42100 C 8, POS1, STF, NT1, NT2, POS2, DIP(ABS. UNITS), P8
42200 C FOR P8: 0= SLUR, 1=BRACKETS, 2=LFT ONLY, 3=RT ONLY
42300
42400 SUBROUTINE NAMEXT(NAME,EXT,NUM,SPC)
42500 DIMENSION FORM2(5),FORMT(5),NUMS(30)
42600 EQUIVALENCE (F1,FORMT(1)),(F2,FORMT(2)),(F3,FORMT(3)),
42700 1 (F4,FORMT(4)),(F5,FORMT(5))
42800 COMMON /ALF/INP(72)
42900 DATA FORMT(1)/'('/,FORM2/'A1,','A2,','A3,','A4,','A5,'/
43000 1, FORM3/'I,F)'/
43100 1 FORMAT(72A1)
43200 ACCEPT 1,INP
43300 DO 2 K=2,72
43400 IF(INP(K).EQ.' ')GO TO 3
43500 2 IF(INP(K).EQ.'.')GO TO 4
43600 3 F3=FORM3
43700 F4=' '
43800 F5=' '
43900 5 F2=FORM2(K-1)
44000 REREAD FORMT,NAME,NUM,SPC
44100 GO TO 10
44200 4 FORMT(3)=FORM2(1)
44300 C CATCHES DOT
44400 DO 7 N=K+1,72
44500 7 IF(INP(N).EQ.' ')GO TO 8
44600 8 F4=FORM2(N-K-1)
44700 F5=FORM3
44800 F2=FORM2(K-1)
44900 REREAD FORMT,NAME,K,EXT,NUM,SPC
45000 CALL LO2UP(EXT)
45100 10 CALL LO2UP(NAME)
45200 END